Cyclic redundancy check (CRC) is a known technique for validating data. Generally, CRC is used to determine the validity of data sent from one device to another. For example, CRC is used to determine the validity of data that has been transmitted from a transmitter to a receiver. As another example, CRC is used to determine the validity of data read from a memory. A CRC of size n, where n is an integer greater than or equal to one and represents the number of bits used in the CRC, is guaranteed to detect any contiguous error burst of up to size n (i.e., n bits). A CRC of size n is commonly denoted as CRC-n. An error burst of n bits (which may also herein be referred to as a burst of n bits) represents n bits of random states, where any to all of the n bits may be in error. In addition to detecting bursts of size n, a CRC-n can also detect some multiple bursts that are separated in space, e.g., double bursts that are separated in space (i.e., are separated from one another by intervening bits).
As can be surmised from the above, one factor that characterizes a CRC is its length. Another factor that characterizes a CRC is the polynomial used in the CRC. These factors determine the effectiveness of a CRC in detecting errors. Another factor that determines the effectiveness of a CRC is the length of the data packet or data frame over which a CRC is applied. In the below discussion, data packet and data frame may be used interchangeably. Those skilled in the art would recognize, however, that a data frame is different from a data packet. A data frame includes the data packet, frame identifying information, and the CRC bits. Thus, each data frame whose data is to be checked using a CRC includes CRC bits.
CRCs of a particular polynomial type may be more effective than another at detecting a certain type of error. Also, for a given CRC polynomial, using a larger size CRC increases the likelihood of detecting larger error bursts, including larger multiple bursts. However, using a larger CRC is slower (or requires larger hardware resources) and takes more bandwidth to transmit.
Another known technique for validating data is checksum. As in the case of CRC, using a larger checksum increases the likelihood of detecting larger error bursts, including larger multiple bursts. However, using a larger checksum is slower (or requires larger hardware resources) and takes more bandwidth to transmit.